home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Toolbox
/
Visual Basic Toolbox (P.I.E.)(1996).ISO
/
graphics
/
spline11
/
manual.txt
< prev
next >
Wrap
Text File
|
1995-09-01
|
7KB
|
232 lines
SPLINES.DLL Copyright (c) 1993-95 by Andrew S. Dean - All rights reserved.
SPLINES.DLL is a Windows DLL distributed as shareware. SPLINES.DLL
can be used from any Windows language or environment which supports
DLL calls. See the file REGISTER.TXT for information on registration.
SPLINES.DLL is a function library for creating spline curves.
Several types of splines are supported (Bezier splines, B splines,
Beta splines and Tau splines). Curves can be defined in 2D
or 3D. All splines in the library are cubic splines.
Splines are defined by interpolating between a set of distinct
control points. Both control points and the resulting curves are
stored in arrays of xyzTD structures. To create a curve, an xyzTD
array of control points is passed to a spline function. The
function returns another xyzTD array filled with the interpolated
points which define the curve. Parameters can be used to control
how many interpolating points are computed, and to fine-tune the
shape of a curve.
The spline points can be used to draw a curve, as a path for an
animation object, as a contour for creating more complex 3D
objects, and for many other applications that require smooth
interpolations or transitions.
The spline functions use the following parameters:
Resolution The number of interpolating points to use for each
curve segment. The curves are composed of a number
of curve segments, each curve segment being associated
with 4 adjacent control points. The resolution parameter
specifies the number of line intervals that will be
used to approximate a curve segment.
The resolution parameter affects the number of curve
points as follows:
BEZIER SPLINES:
# points on entire spline curve
= Resolution * [( # of control points + 1) DIV 4]
where DIV indicates integer division
with any fractional remainder truncated.
Note that Bezier splines require that the
number of control points be of the form
# of control points = 4 + 3*i
B-SPLINES and TAU SPLINES:
# points on entire spline curve
= Resolution * ( # of control points - 1 )
BETA SPLINES:
# points on entire spline curve
= Resolution * ( # of control points - 3 ) -1
For example, a B spline with 4 control points and
resolution of 5 will have 3 curve segments, for a
total of 15 points on the curve.
Bias Spline segments are controlled by a window of 4
control points. Bias affects which control points
exert the most influence on the curve. Different
types of splines use the bias parameters in different
ways. The SplinApp.EXE program can be used to
demonstrate the effect of the bias parameter on
different curves.
Tension The tension parameter affects how close the
spline curve is to its control polygon. Increasing
the tension parameter will pull the curve closer to
the control polygon.
Curve[] The array of spline points filled in by the spline
function. This is passed as a buffer to the spline
function, so it is up to the programmer to make sure
the array is big enough.
Control[] The array of control points used by the spline
function to compute the interpolating spline points.
This is referred to as the control polygon.
NumControl The integer number of control points in the
control polygon.
All the spline functions return the number of spline points computed.
Splines can be defined in both 2D and 3D. If you just need to work
with 2D points, simply set the the Z component of each point to
zero.
Support for using SPLINES.DLL with Visual Basic is distributed as
the file SPLINES.BAS, which contains the necessary Type definitions
and Declare statements.
Support for using SPLINES.DLL with C/C++ is provided through the
files SPLINES.H and SPLINES.LIB.
SPLINES.DLL was compiled with Microsoft Visual C++.
The following examples, in C and Visual Basic, create a control
polygon of 4 points, and then create an interpolating B spline
curve with 16 points.
C Example
xyz_td Control[4];
xyz_td Curve[16];
long lNumControls;
long lNumPoints;
Control[0].x = 0.0;
Control[0].y = 0.0;
Control[0].z = 0.0;
Control[1].x = 10.0;
Control[1].y = 10.0;
Control[1].z = 0.0;
Control[2].x = 20.0;
Control[2].y = 10.0;
Control[2].z = 0.0;
Control[3].x = 30.0;
Control[3].y = 0.0;
Control[3].z = 0.0;
/* Create a normal Bspline (tension = 1.0) */
lNumPoints = Bspline(5, 1.0, 4, Control, Curve );
/* The Curve is now been filled with the points:
i Curve[i].x Curve[i].y Curve[i].z
0 0 0 0
1 2 1.98 0
2 4 3.89 0
3 6 5.64 0
4 8 7.15 0
5 10 8.33 0
6 12 9.13 0
7 14 9.53 0
8 16 9.53 0
9 18 9.13 0
10 20 8.33 0
11 22 7.15 0
12 24 5.64 0
13 26 3.89 0
14 28 1.99 0
15 30 0 0
*/
VB Example
----------
Dim xyzTD As Control[4]
Dim xyzTD As Curve[16]
Dim lNumControls As Long
Dim lNumPoints As Long
Control(0).fX = 0.0
Control(0).fY = 0.0
Control(0).fZ = 0.0
Control(1).fX = 10.0
Control(1).fY = 10.0
Control(1).fZ = 0.0
Control(2).fX = 20.0
Control(2).fY = 10.0
Control(2).fZ = 0.0
Control(3).fX = 30.0
Control(3).fY = 0.0
Control(3).fZ = 0.0
' Create a normal Bspline (tension = 1.0)
lNumPoints = Bspline(5, 1.0, 4, Control(0), Curve(0))
' The Curve is now been filled with the points:
' i Curve(i).x Curve(i).y Curve(i).z
'
' 0 0 0 0
' 1 2 1.98 0
' 2 4 3.89 0
' 3 6 5.64 0
' 4 8 7.15 0
' 5 10 8.33 0
' 6 12 9.13 0
' 7 14 9.53 0
' 8 16 9.53 0
' 9 18 9.13 0
' 10 20 8.33 0
' 11 22 7.15 0
' 12 24 5.64 0
' 13 26 3.89 0
' 14 28 1.99 0
' 15 30 0 0
'
'